package main

import "fmt"

func main() {
	fmt.Println("6. 循环语句")

	// for 循环的基本形式
	fmt.Println("基本 for 循环:")
	for i := 1; i <= 5; i++ {
		fmt.Printf("计数: %d ", i)
	}
	fmt.Println()

	// for 循环省略初始语句和后置语句 (类似 while)
	fmt.Println("\n类似 while 的 for 循环:")
	count := 1
	for count <= 5 {
		fmt.Printf("计数: %d ", count)
		count++
	}
	fmt.Println()

	// 无限循环
	fmt.Println("\n无限循环 (前3次):")
	loopCount := 0
	for {
		loopCount++
		fmt.Printf("循环次数: %d ", loopCount)
		if loopCount >= 3 {
			break // 跳出循环
		}
	}
	fmt.Println()

	// 使用 range 遍历数组/切片
	fmt.Println("\n遍历数组/切片:")
	numbers := []int{10, 20, 30, 40, 50}
	for index, value := range numbers {
		fmt.Printf("索引: %d, 值: %d\n", index, value)
	}

	// 只获取索引
	fmt.Println("\n只获取索引:")
	for i := range numbers {
		fmt.Printf("索引: %d\n", i)
	}

	// 只获取值
	fmt.Println("\n只获取值:")
	for _, value := range numbers {
		fmt.Printf("值: %d\n", value)
	}

	// 遍历字符串
	fmt.Println("\n遍历字符串:")
	str := "Go语言"
	for index, char := range str {
		fmt.Printf("字节索引: %d, 字符: %c, Unicode码点: %U\n", index, char, char)
	}

	// 遍历映射
	fmt.Println("\n遍历映射:")
	ages := map[string]int{
		"张三": 25,
		"李四": 30,
		"王五": 35,
	}
	for key, value := range ages {
		fmt.Printf("姓名: %s, 年龄: %d\n", key, value)
	}

	// break 和 continue 语句
	fmt.Println("\nbreak 和 continue:")
	for i := 1; i <= 10; i++ {
		if i == 3 {
			fmt.Println("跳过", i)
			continue // 跳过当前迭代
		}
		if i == 7 {
			fmt.Println("在", i, "处停止循环")
			break // 跳出循环
		}
		fmt.Printf("数字: %d ", i)
	}
	fmt.Println()

	// 嵌套循环和标签
	fmt.Println("\n嵌套循环和标签:")
outer:
	for i := 1; i <= 3; i++ {
		for j := 1; j <= 3; j++ {
			if i == 2 && j == 2 {
				fmt.Println("跳出外层循环")
				break outer // 跳出指定的循环
			}
			fmt.Printf("i=%d, j=%d\n", i, j)
		}
	}
}
